/**
 * 解法一 非递归
 * 给表头增加一个头节点  并且保留它的引用  返回新增节点的下一个节点
 * @param {*} head 
 * @param {*} val 
 * @returns 
 */
var removeElements = function (head, val) {
    var Node =new ListNode(-1,head) 
    let currNode=Node
    if(!head) return head
    while (currNode.next) {
        if(currNode.next.val==val){
            currNode.next=currNode.next.next
        }
        currNode=currNode.next
    }
    return currNode.next
};


/**
 * 递归写法
 * @param {*} head 
 * @param {*} val 
 * @returns 
 */

var removeElements = function (head, val) {
    if(!head) return head
    head.next=removeElements(head.next,val)
    return head.val==val?head.next:head
}